package render;

import java.awt.Graphics;

import javax.swing.ImageIcon;

import manager.ImageManager;

/**
 * @名称 最简单的模型类
 * @author Passerby
 * @说明 最简单最基础的模型类，单张图片，无法播放动画，
 * 所以运算效率最快。
 * 相当于只是ImageIcon套了个壳
 */
public class SimpleModel extends Model {

	private ImageIcon image = null;
	private int width = 0;
	private int height = 0;
	
	/**
	 * @author Passerby
	 * @说明 默认构造函数，调用不会产生任何作用，故image还是为null。
	 * 在物体没有模型的时候用它
	 */
	public SimpleModel() {
		
	}
	
	/**
	 * @author Passerby
	 * @param imgKey 图像的键名，负责在ImageManager中找到该图
	 * @param w 图像宽度
	 * @param h 图像高度
	 * @说明 指定宽高的构造函数
	 */
	public SimpleModel(String imgKey, int w, int h) {
		ImageManager manager = ImageManager.get();
		image = manager.getImage(imgKey);
		width = w;
		height = h;
	}
	
	/**
	 * @author Passerby
	 * @param imgKey 图像的键名，负责在ImageManager中找到该图
	 * @说明 不指定宽高的构造函数，图像的宽高由图像本身决定
	 */
	public SimpleModel(String imgKey) {
		ImageManager manager = ImageManager.get();
		image = manager.getImage(imgKey);
		width = image.getIconWidth();
		height = image.getIconHeight();
	}

	/**
	 * @author Passerby
	 */
	@Override
	public void draw(Graphics g, int x, int y) {
		// 非显示的物体在此就运算完毕
		if (image == null) {
			return;
		}
		g.drawImage(image.getImage(), x, y,
				width, height, null);
	}

	@Override
	public void setWidth(int width) {
		// 如果输入的宽度为复数，则代表用图像的宽度
		if (width < 0) {
			width = this.image.getIconWidth();
		}
		this.width = width;
	}

	@Override
	public void setHeight(int height) {
		// 如果输入的高度为复数，则代表用图像的高度
		if (height < 0) {
			height = this.image.getIconHeight();
		}
		this.height = height;
	}

	@Override
	public void unifyScaleByWidth() {
//		width divided by height 宽除以高	宽/高
		float wdh = (float)image.getIconWidth() / (float)image.getIconHeight();
		this.height = (int) (this.width / wdh);
	}

	@Override
	public void unifyScaleByHeight() {
//		width divided by height 宽除以高	宽/高
		float wdh = (float)image.getIconWidth() / (float)image.getIconHeight();
		this.width = (int) (this.height * wdh);
	}

}
